package com.example.demo1.dao;

import com.example.demo1.model.ArticleInfo;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 言初
 * Date: 2024-06-19
 * Time: 18:19
 */
public interface ArticleMapper {


    // 根据用户id查询此用户发表过的所有文章
    @Select("select * from articleinfo where uid=#{uid} order by id desc")
    List<ArticleInfo> getListByUid(@Param("uid") int uid);


    // 根据用户id，和文章id，来判断如果这个文章是这个用户的那就执行删除操作，要不然就不删除
    @Delete("delete from articleinfo where id = #{aid} and uid = #{uid}")
    int del(@Param("aid")int aid,int uid);


    // 把文章数据存到文章表中(文章标题，文章正文，文章的作者ID)
    @Insert("insert into articleinfo (title,content,uid) values (#{title},#{content},#{uid})")
    int add(ArticleInfo articleInfo);


    // 按照文章ID和用户ID，一方面验证文章是否归属于用户，一方面查询文章的详细信息并返回
    @Select("select * from articleinfo where id=#{aid} and uid=#{uid}")
    ArticleInfo getArticleByIdAndUid(@Param("aid")int aid,@Param("uid")int uid);


    // 根据文章ID和用户ID，一方面验证文章是否归属于用户，一方面把修改的文章内容存入到数据库中
    @Update("update articleinfo set title=#{title},content=#{content} where id=#{id} and uid=#{uid}")
    int update(ArticleInfo articleInfo);


    // 根据文章ID来查询文章对象
    @Select("select * from articleinfo where id=#{aid}")
    ArticleInfo getDetailById(@Param("aid") int aid);



    // 根据用户ID，去文章表中查询这个用户的总文章数
    @Select("select count(*) from articleinfo where uid=#{uid}")
    int getArtCountByUid(@Param("uid")int uid);


    // 根据文章ID，来实现阅读量加一的操作
    @Update("update articleinfo set rcount=rcount+1 where id=#{aid}")
    int incrementRCount(@Param("aid") int aid);



    // 按照偏移量和每页显示条数来进行查询本页中的文章列表：
    @Select("select * from articleinfo order by id desc limit #{psize} offset #{offset}")
    public List<ArticleInfo> getListByPage(@Param("psize") int psize,@Param("offset") int offset);


    // 查询文章表中有多少篇文章
    @Select("select count(*) from articleinfo")
    public int getCount();



}
